Android中ListView的垃圾回收 - 王胜
ListView中ItemView的复用
为了提高ListView的加载速度和用户操作的流畅度,ListView底层做了ItemView的复用,避免重复地为每一个ItemView开辟空间。
ActiveView
激活view,当期显示在屏幕上的激活的view
- ScrapView
废弃view,被删除的ActiveView会被自动加入ScrapView
ListView的ItemView中大图片的覆盖显示
由于复用机制,当Item中包含大图时,由于Java GC的回收机制不够及时,造成ScrapView中图片资源不能立即释放,当用户上拉加载新的item内容时,却看到了之前加载的图片,直到新图从网络下载完毕,才会刷新view正确显示图片。
考虑到这种情况,Android 在API Level1中已经为ListView和GridView添加了RecyclerListener回调接口。开发者只需为ListView注册回调,重写onMovedToScrapHeap方法即可。
示例:
1 | mListView.setRecyclerListener(new RecyclerListener() { |
参考资料:
提升用户体验的7大微交互 - 张超耀
众所周知,我们总是依据封面来判断书的好坏,聪明的设计师会创造实用有吸引力的界面。潜在用户可能会被吸引,但如何一直黏住他们呢?
要试着回答这个问题,所有一切都指向人本设计,其中用户是最主要的考量。以人为本:你的应用应该使用日常用语,包括情绪、口语,外观还要有一丝“诱惑力”。界面应当成为你的好朋友,时刻准备给出建议提升你的体验,让你会心一笑。
是微交互在起作用。精确的说,这主要是界面附带的交互动画,使它更具表现力。优秀的动画能够:
- 表达状态并提供反馈
- 提升直接的操纵感
- 将操作结果可视化
在用户体验中,关键是你如何对待用户,还有他们使用产品时的感受。极小的细节都值得加倍留心。微交互提供了用户所需的反馈,表达了当前运行状况。无论背后逻辑有多么复杂,都能使界面更亲切。
显示系统状态
Jakob Nielsen在可用性原则启示第一条中描述:让用户始终知晓当前在发生什么。用户希望立马得到回应,但总有些情况下,网站需要一点时间等待操作完成。
那么,界面就应当在背景处显示图形,反映完成百分比。或是播放声音,让用户了解当前发生的事情。这个原则也关系到文件传输:不要让用户觉得无聊,给他们看进度条。即使是不太令人愉快的通知,比如传输失败,也应该以令人喜爱的方式展现。让你的用户微笑!
突出显示变化
通常为了节省空间,应用会在需要时把某个按钮替换掉。有时我们需要展现通知,确保用户注意到了。动画可以吸引他们注意,不至于忽略你认为重要的信息。
保持前后关联
在这个智能手机和小屏幕智能手表的时代,难以在屏幕上展现大量信息。有一种处理方式,是在不同页面之间保持清晰的导航。让用户理解什么东西来自何处,便能轻易回溯。有多种方式可以实现:
非标准布局
继续之前的例子,微交互应当帮助用户理解如何操作非标准的布局,去除不必要的疑惑。照片前后滑动、滚动式图表和旋转角色都是很棒的选择:
行动号召
除了帮助用户有效地操作应用,微交互也有鼓励用户操作的能力:持续浏览、点赞或分享内容,只因为这很有吸引力,用户不舍离去:
输入的视觉化
所有应用中,数据录入都是最重要的元素之一。数据录入决定了用户所得结果的质量。通常,这部分很无趣,但微交互可以使它与众不同:
使教程生动形象
当然,在应用发布后,动画可以教育用户。它突出一些基本功能和控件,排除用户在未来的使用中的障碍。
结论
所以,如果你重视用户体验,就应该从头到尾精细打磨界面,通过微交互与动画为它增色添彩。它会为你的项目赋予生命。
注意每个细节,是使人机交互易用的成功要诀
曾铭
CLI 上手
CLI vs GUI
- Command Line Interface VS Graphical User Interface
- 分别是给工程师用的和给人(包含工程师)用的
- 哪个方便用哪个,哪个好玩用哪个
CLI 能干什么?(for me)
- 快速安装软件
- CLI 开发:工具、服务,如 jenkins, sonar, ssh-key,
CLI 如何上手
- 不要畏惧,把命令行当做大一上的 C 语言,是最简单,逻辑最清晰的。(鬼知道 GUI 背后都做了什么)
- 理解环境变量 profile_load_path env echo,知道 shell 怎么去找一个命令即可
- 安装软件,了解常见的包管理工具即可:homebrew(常用软件), gem(ruby 软件), npm (node.js 软件)
- 基本都是 search install list ,会这三个参数就行了
- 思想都是想通的,比如 pod (for iOS/OSX dev)
1 | # 在终端输入试试 |
Sonar 学习
- Sonar不叫Sonar 叫SonarQube
- 开源的 刁刁的 项目地址
- 管理平台代码质量
支持plugin
Sonar的3个组成部分
- Database (支持多种类型的数据库MySQL/Oracle) 配置sonar实例 存储分析结果
- Web Server 浏览代码质量分析结果
- Analyzers 分析代码的分析器
Sonar Notes
- SonarQube的web server和database只能有一个
- 从性能上考虑 三个组件应该放在三个专有的电脑上,但是Database和Web Server可以安装在同一台电脑上
- Datatbase和Analyzers不应该安装在同一台电脑上
- Analyzers可以通过加电脑扩展
- Database和Analyzers必须存在同一个网络内
- 所有的机子必须时间同步
Analyzers
SonarQube Runner
: recommended for all non-Maven projectsMaven
: recommended for all projects built with MavenSonarQube Ant Task
: to integrate with projects built with AntGradle
: to integrate with projects built with GradleCI Engine
: see Jenkins plugin or Hudson plugin or Bamboo plugin or AnthillPro plugin. Note that other CI engines can be used even if there is no SonarQube plugin available.
Mac下跑通sonar所有流程需要的东西
- a Mac with Xcode
- SonarQube
- SonarQube Runner
- xctool
- xctool是facebook开源的一个命令行工具,用来替代苹果的xcodebuild工具
- OCLint
- OCLint是一个静态代码分析器,可以检测的Objective-C代码(同时支持Ç和c + +),发现常见的问题:例如的if / else / try / catch和/最后声明出错,未被使用的本地实例和参数,过度复杂(有效值代码行数状语从句:常循环复杂度太高),冗余代码,代码异味,以及其他不好的代码。
- gcovr
- 代码覆盖率分析工具
常用配置文件
配置Sonar-Runner
路径 <放置sonar的目录>/sonar-runner/2.4/libexec/conf/sonar-runner.properties
只摘录相关项
1
2
3
4
5
6
7
8
9
10
11
12
13#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- MySQL
sonar.jdbc.url=jdbc:mysql://192.168.22.22:3306/sonar?useUnicode=true&characterEncoding=utf8
#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
#----- Security (when 'sonar.forceAuthentication' is set to 'true')
sonar.login=admin
sonar.password=admin
配置Database和web server
sonar.properties
- 路径 <放置sonarqube的目录>/sonarqube-5.1.2/conf/sonar.properties
- 只摘录相关项
1
2
3
4
5
6
7
8
9sonar.jdbc.username=sonar // 数据库账号
sonar.jdbc.password=sonar // 数据库密码
sonar.jdbc.url=jdbc:mysql://192.168.22.22:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
// MySql路径
sonar.web.host=0.0.0.0 // web host
sonar.web.context=/sonar // web 路径
sonar.web.port=9000 // 端口号
配置需要分析的项目 (需放置在项目根目录下)
run-sonar.sh
分析项目的脚本
- 未做修改 直接拿来用
sonar-project.properties
项目的必要参数
只摘录相关项
看注释
1 |
|